package com.ksyun.campus.dataserver.services;

import com.ksyun.campus.dataserver.domain.StatInfo;
import com.ksyun.campus.dataserver.dto.req.DataServerFixReqDto;
import com.ksyun.campus.dataserver.dto.resp.DataServerAllFilesRespDto;
import com.ksyun.campus.dataserver.dto.resp.ReadRespDto;

public interface DataService {

    /**
     * 写入数据到本地磁盘，并同步到指定副本的 dataServer
     *
     * @param fileSystemName 文件系统名称，用于逻辑隔离
     * @param statInfo       文件元数据，包括文件路径、类型等信息
     * @param fileBytes      要写入的文件字节数据
     * @return 返回文件的最新状态信息（包含副本信息）
     */
    StatInfo write(String fileSystemName, StatInfo statInfo, byte[] fileBytes);

    /**
     * 从本地磁盘读取指定路径的文件内容，并返回文件状态信息
     *
     * @param fileSystemName 文件系统名称，用于逻辑隔离
     * @param path           文件路径
     * @param offset         读取的偏移量
     * @param length         读取的长度
     * @param statInfo       文件元数据，包括文件路径、类型等信息
     * @return 返回文件内容
     */
    ReadRespDto read(String fileSystemName, String path, int offset, int length, StatInfo statInfo);

    /**
     * 删除指定路径的文件或目录
     *
     * @param fileSystemName 文件系统名称，用于逻辑隔离
     * @param statInfo       文件元数据，包括文件路径、类型等信息
     * @return 返回删除操作是否成功
     */
    boolean delete(String fileSystemName, StatInfo statInfo);

    /**
     * 获取当前节点上的所有文件和目录信息
     *
     * @return 包含所有文件和目录信息的响应对象
     */
    DataServerAllFilesRespDto getAllFiles();

    /**
     * 获取当前节点的存储路径
     *
     * @return 当前节点的存储路径
     */
    String getStoragePath();

    /**
     * 修复文件副本或文件夹
     *
     * @param fileSystemName 文件系统名称
     * @param fixReqDto      包含修复信息的请求数据传输对象
     * @return 修复是否成功
     */
    Boolean fixFiles(String fileSystemName, DataServerFixReqDto fixReqDto);
}
